/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista.personas.pacientes;

import java.util.Iterator;
import javax.swing.JOptionPane;
import modelo.GestorModelo;
import modelo.patologias.Enfermedad;
import modelo.personas.pacientes.GestorPaciente;
import modelo.personas.pacientes.GestorPariente;
import modelo.personas.pacientes.Pariente;
import util.GestorComponenteVista;
import util.validation.CreadorCriterios;
import vista.GestorVistaEditor;
import vista.patologias.EnfermedadesTreeModelo;

/**
 *
 * @author raul
 */
public class GestorVistaParienteDlg extends GestorVistaEditor {
    
    private EditorParienteDlg formulario;
    private GestorPaciente gestorPaciente;
    private GestorPariente gestorModelo = new GestorPariente();

    public GestorVistaParienteDlg(GestorPaciente gestorPaciente) {
        this.gestorPaciente = gestorPaciente;
        this.gestorModelo.crearModelo();
        super.setModo(CREACION);
    }
    
    public GestorVistaParienteDlg(GestorPaciente gestorPaciente, Object pariente) {
        this.gestorPaciente = gestorPaciente;
        this.gestorModelo.setModelo((Pariente) pariente);
        super.setModo(MODIFICACION);
    }

    @Override
    public String getNombreObjeto() {
        return "El pariente";
    }

    @Override
    public void cerrarFormulario() {
        getFormulario().dispose();
    }

    @Override
    public void abrirFormulario() {
        this.setFormulario(new EditorParienteDlg(this));
        this.inicializarVista();
        formulario.setVisible(true);
    }

    @Override
    public EditorParienteDlg getFormulario() {
        return formulario;
    }

    public void setFormulario(EditorParienteDlg formulario) {
        this.formulario = formulario;
    }

    @Override
    public GestorModelo getGestorModelo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void inicializarVista() {
        getFormulario().cargarComboParentescos(gestorModelo.listarParentescos());
        getFormulario().crearModeloArbol(new EnfermedadesTreeModelo());
        if (!super.isCreacion()) {
            getFormulario().setBusquedaPermitida(false);
            setearVistaConModelo();
        }
    }

    @Override
    public void setearModeloConVista() {
        Pariente modelo = gestorModelo.getModelo();
        modelo.getPersona().setNombre(formulario.getNombreTxt().getText());
        modelo.getPersona().setApellido(formulario.getApellidoTxt().getText());
        modelo.getPersona().setSexo(formulario.getSexoCmb().getSelectedItem().toString());
        setearParentesco();
        gestorModelo.setDocumento(formulario.getNroDocumentoTxt().getValue());
        gestorModelo.setEnfermedades(
                GestorComponenteVista.getObjetosEnLista(formulario.getEnfermedadesLst()));
    }

    void setearParentesco() {
        gestorModelo.setParentesco(formulario.getParentescoCmb().getSelectedItem());
    }

    @Override
    public void setearVistaConModelo() {
        Pariente modelo = gestorModelo.getModelo();
        getFormulario().getNombreTxt().setText(modelo.getPersona().getNombre());
        getFormulario().getApellidoTxt().setText(modelo.getPersona().getApellido());
        getFormulario().getSexoCmb().setSelectedItem(modelo.getPersona().getSexo());
        getFormulario().getNroDocumentoTxt().setValue(modelo.getPersona().getDocumento().getNumero());
        getFormulario().getParentescoCmb().setSelectedItem(modelo.getParentesco());
        getFormulario().cargarListaEnfermedades(gestorModelo.getEnfermedades());
        getFormulario().getEsPacienteLbl().setVisible(modelo.isPaciente());
        if (modelo.isPaciente()) getFormulario().setEdicionPersonaHabilitada(false);
        
    }

    void buscarEnfermedad(String enfermedad) {
        getFormulario().crearModeloArbol(new EnfermedadesTreeModelo());
        cargarArbol(gestorModelo.buscarEnfermedad(enfermedad));
    }
    
    public void cargarArbol(java.util.Collection datos) {
        Iterator<Enfermedad> i = datos.iterator();
        while (i.hasNext()){
            Enfermedad e = i.next();
            getFormulario().agregarNodoArbol(e.getTipoEnfermedad(), e);
        }
    }

    void buscarPersona() {
         CreadorCriterios c = new CreadorCriterios();
         c.crearCriterios(getFormulario());
         super.getGestorValidacion().validarGrupo(formulario, 0);
         if (super.getGestorValidacion().validaFormulario()) {
            if (gestorModelo.existePersona(c.getCriterios(),gestorPaciente.getModelo())) {
                setearVistaConModelo();
                getFormulario().setBusquedaPermitida(false);
                if (gestorModelo.getModelo().isPaciente()) 
                    getFormulario().setEdicionPersonaHabilitada(false);
            } else {
                JOptionPane.showMessageDialog(getFormulario(), "No hay resultados");
            }
        } else  {
             JOptionPane.showMessageDialog(getFormulario(),
                "Para realizar la busqueda "
                     + "se deben completar los campos nombre, apellido y nro de documento"
                     , "Completar los campos mínimos", JOptionPane.ERROR_MESSAGE);
         }
    }

    @Override
    public void guardar() {
        super.getGestorValidacion().validar(formulario);
        if (super.getGestorValidacion().validaFormulario()) {
            if (!gestorModelo.getModelo().isPaciente()) {
                setearModeloConVista();
            } else {
                setearParentesco();
            }
            if (gestorModelo.validaModelo(gestorPaciente)) {
                if (super.isCreacion()) {
                    gestorPaciente.agregarPariente(gestorModelo.getModelo());
                }
                JOptionPane.showMessageDialog(getFormulario(), getNombreObjeto() + " se\n"
                        + "guardo correctamente");
                cerrarFormulario();
            } else {
                JOptionPane.showMessageDialog(getFormulario(),
                        getNombreObjeto() + " que intenta registrar "
                        + "ya se encuentra registrado en la base de datos",
                        "Error", JOptionPane.ERROR_MESSAGE);
                if (!isCreacion()) gestorModelo.deshacerCambios();
            }
        } else {
            super.mostrarMensajesDeError();
        }
    }
    
    
}
